using Microsoft.Xna.Framework;

namespace NGen.Managers.GameObject.Fsm
{
	public class GameObject2DFsmState<TStateMachineInterfaceType>
		where TStateMachineInterfaceType : GameObject2DFsm<TStateMachineInterfaceType>
	{
		/// <summary>
		/// 	internal reference to the state machine
		/// </summary>
		internal TStateMachineInterfaceType m_stateMachine;

		/// <summary>
		/// 	get a reference to the state machine managing this state. 
		/// 	this is set automatically when state is pushed.
		/// </summary>
		public TStateMachineInterfaceType Parent { get; internal set; }

		/// <summary>
		/// 	called whenever a state becomes the top state on the stack, via a push OR pop
		/// </summary>
		public virtual void OnEnter() {}

		/// <summary>
		/// 	called whenever a state is no longer the top state on the stack, via push OR pop
		/// </summary>
		public virtual void OnExit() {}

		public virtual void Initialize() {}
		public virtual void Update(GameTime p_gameTime) {}
		public virtual void Draw(GameTime p_gameTime) {}
		public virtual void Cleanup() {}
	}
}